package com.sig.util;

import com.sig.util.page.CommonPage;
import org.apache.commons.collections.CollectionUtils;

import java.util.List;

/**
 * 分页工具
 *
 * @author sig
 * @since 2019/1/30
 */
public final class PageUtil {

    private PageUtil() {
    }

    /**
     * @param list     分页列表
     * @param page     第几页，1代表第一页
     * @param pageSize 每页数量
     * @param <T>
     * @return
     */
    public static <T> CommonPage<T> paging(final List<T> list, final int page, final int pageSize) {
        if (CollectionUtils.isEmpty(list))
            return null;
        if (page <= 0 || pageSize <= 0)
            return null;
        // 总数量
        final int totalCount = list.size();
        // 总页数
        final int pageCount = totalCount % pageSize > 0 ? totalCount / pageSize + 1 : totalCount / pageSize;
        final List<T> newList = paging(list, page, pageSize, pageCount, totalCount);
        // 下一页
        final int nextPage = page + 1 >= pageCount ? pageCount : page + 1;
        CommonPage<T> pageCommon = new CommonPage<>();
        pageCommon.setInfoList(newList);
        pageCommon.setTotalCount(totalCount);
        pageCommon.setPage(page);
        pageCommon.setNextPage(nextPage);
        pageCommon.setPageCount(pageCount);
        return pageCommon;
    }

    /**
     * @param list       分页列表
     * @param page       第几页，1代表第一页
     * @param pageSize   每页数量
     * @param pageCount  总页数
     * @param totalCount 总数量
     * @param <T>
     * @return
     */
    private static <T> List<T> paging(final List<T> list, final int page, final int pageSize, final int pageCount, final int totalCount) {
        if (page > pageCount)
            throw new RuntimeException("没有这么多页数");
        if (pageSize == totalCount) // 刚好一整页
            return list;
        if (page == pageCount) // 最后一页
            return list.subList((page - 1) * pageSize, totalCount);
        return list.subList((page - 1) * pageSize, pageSize * page);
    }
}
